home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 June / PersonalComputerWorld-June2009-CoverdiscCD.iso / Software / Freeware / Adobe AIR 1.5.1 / AdobeAIRInstaller.exe / setup.swf / scripts / mx / skins / halo / PanelSkin.as < prev    next >
Encoding:
Text File  |  2009-02-12  |  8.0 KB  |  219 lines

  1. package mx.skins.halo
  2. {
  3.    import flash.display.GradientType;
  4.    import flash.display.Graphics;
  5.    import flash.utils.describeType;
  6.    import flash.utils.getQualifiedClassName;
  7.    import mx.core.EdgeMetrics;
  8.    import mx.core.FlexVersion;
  9.    import mx.core.IContainer;
  10.    import mx.core.IUIComponent;
  11.    import mx.core.mx_internal;
  12.    
  13.    use namespace mx_internal;
  14.    
  15.    public class PanelSkin extends HaloBorder
  16.    {
  17.       mx_internal static const VERSION:String = "3.0.0.0";
  18.       
  19.       private static var panels:Object = {};
  20.       
  21.       private var oldControlBarHeight:Number;
  22.       
  23.       protected var _panelBorderMetrics:EdgeMetrics;
  24.       
  25.       private var oldHeaderHeight:Number;
  26.       
  27.       public function PanelSkin()
  28.       {
  29.          super();
  30.       }
  31.       
  32.       private static function isPanel(param1:Object) : Boolean
  33.       {
  34.          var xmllist:XMLList;
  35.          var s:String = null;
  36.          var x:XML = null;
  37.          var parent:Object = param1;
  38.          s = getQualifiedClassName(parent);
  39.          if(panels[s] == 1)
  40.          {
  41.             return true;
  42.          }
  43.          if(panels[s] == 0)
  44.          {
  45.             return false;
  46.          }
  47.          if(s == "mx.containers::Panel")
  48.          {
  49.             panels[s] == 1;
  50.             return true;
  51.          }
  52.          x = describeType(parent);
  53.          xmllist = x.extendsClass.(@type == "mx.containers::Panel");
  54.          if(xmllist.length() == 0)
  55.          {
  56.             panels[s] = 0;
  57.             return false;
  58.          }
  59.          panels[s] = 1;
  60.          return true;
  61.       }
  62.       
  63.       override public function styleChanged(param1:String) : void
  64.       {
  65.          super.styleChanged(param1);
  66.          if(param1 == null || param1 == "styleName" || param1 == "borderStyle" || param1 == "borderThickness" || param1 == "borderThicknessTop" || param1 == "borderThicknessBottom" || param1 == "borderThicknessLeft" || param1 == "borderThicknessRight" || param1 == "borderSides")
  67.          {
  68.             _panelBorderMetrics = null;
  69.          }
  70.          invalidateDisplayList();
  71.       }
  72.       
  73.       override mx_internal function drawBorder(param1:Number, param2:Number) : void
  74.       {
  75.          var _loc4_:Number = NaN;
  76.          var _loc5_:Number = NaN;
  77.          var _loc6_:Number = NaN;
  78.          var _loc7_:Graphics = null;
  79.          var _loc8_:IContainer = null;
  80.          var _loc9_:EdgeMetrics = null;
  81.          super.mx_internal::drawBorder(param1,param2);
  82.          if(FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
  83.          {
  84.             return;
  85.          }
  86.          var _loc3_:String = getStyle("borderStyle");
  87.          if(_loc3_ == "default")
  88.          {
  89.             _loc4_ = getStyle("backgroundAlpha");
  90.             _loc5_ = getStyle("borderAlpha");
  91.             mx_internal::backgroundAlphaName = "borderAlpha";
  92.             mx_internal::radiusObj = null;
  93.             mx_internal::radius = getStyle("cornerRadius");
  94.             mx_internal::bRoundedCorners = getStyle("roundedBottomCorners").toString().toLowerCase() == "true";
  95.             _loc6_ = !!mx_internal::bRoundedCorners ? Number(mx_internal::radius) : 0;
  96.             _loc7_ = graphics;
  97.             mx_internal::drawDropShadow(0,0,param1,param2,mx_internal::radius,mx_internal::radius,_loc6_,_loc6_);
  98.             if(!mx_internal::bRoundedCorners)
  99.             {
  100.                mx_internal::radiusObj = {};
  101.             }
  102.             _loc8_ = parent as IContainer;
  103.             if(_loc8_)
  104.             {
  105.                _loc9_ = _loc8_.viewMetrics;
  106.                mx_internal::backgroundHole = {
  107.                   "x":_loc9_.left,
  108.                   "y":_loc9_.top,
  109.                   "w":Math.max(0,param1 - _loc9_.left - _loc9_.right),
  110.                   "h":Math.max(0,param2 - _loc9_.top - _loc9_.bottom),
  111.                   "r":0
  112.                };
  113.                if(mx_internal::backgroundHole.w > 0 && mx_internal::backgroundHole.h > 0)
  114.                {
  115.                   if(_loc4_ != _loc5_)
  116.                   {
  117.                      mx_internal::drawDropShadow(mx_internal::backgroundHole.x,mx_internal::backgroundHole.y,mx_internal::backgroundHole.w,mx_internal::backgroundHole.h,0,0,0,0);
  118.                   }
  119.                   _loc7_.beginFill(Number(mx_internal::backgroundColor),_loc4_);
  120.                   _loc7_.drawRect(mx_internal::backgroundHole.x,mx_internal::backgroundHole.y,mx_internal::backgroundHole.w,mx_internal::backgroundHole.h);
  121.                   _loc7_.endFill();
  122.                }
  123.             }
  124.             mx_internal::backgroundColor = getStyle("borderColor");
  125.          }
  126.       }
  127.       
  128.       override public function get borderMetrics() : EdgeMetrics
  129.       {
  130.          var _loc4_:Number = NaN;
  131.          if(FlexVersion.compatibilityVersion < FlexVersion.VERSION_3_0)
  132.          {
  133.             return super.borderMetrics;
  134.          }
  135.          var _loc1_:Boolean = isPanel(parent);
  136.          var _loc2_:IUIComponent = _loc1_ ? Object(parent).mx_internal::_controlBar : null;
  137.          var _loc3_:Number = _loc1_ ? Number(Object(parent).mx_internal::getHeaderHeightProxy()) : NaN;
  138.          if(Boolean(_loc2_) && Boolean(_loc2_.includeInLayout))
  139.          {
  140.             _loc4_ = Number(_loc2_.getExplicitOrMeasuredHeight());
  141.          }
  142.          if(_loc4_ != oldControlBarHeight && !(isNaN(oldControlBarHeight) && isNaN(_loc4_)))
  143.          {
  144.             _panelBorderMetrics = null;
  145.          }
  146.          if(_loc3_ != oldHeaderHeight && !(isNaN(_loc3_) && isNaN(oldHeaderHeight)))
  147.          {
  148.             _panelBorderMetrics = null;
  149.          }
  150.          if(_panelBorderMetrics)
  151.          {
  152.             return _panelBorderMetrics;
  153.          }
  154.          var _loc5_:EdgeMetrics = super.borderMetrics;
  155.          var _loc6_:EdgeMetrics = new EdgeMetrics(0,0,0,0);
  156.          var _loc7_:Number = getStyle("borderThickness");
  157.          var _loc8_:Number = getStyle("borderThicknessLeft");
  158.          var _loc9_:Number = getStyle("borderThicknessTop");
  159.          var _loc10_:Number = getStyle("borderThicknessRight");
  160.          var _loc11_:Number = getStyle("borderThicknessBottom");
  161.          _loc6_.left = _loc5_.left + (isNaN(_loc8_) ? _loc7_ : _loc8_);
  162.          _loc6_.top = _loc5_.top + (isNaN(_loc9_) ? _loc7_ : _loc9_);
  163.          _loc6_.right = _loc5_.bottom + (isNaN(_loc10_) ? _loc7_ : _loc10_);
  164.          _loc6_.bottom = _loc5_.bottom + (isNaN(_loc11_) ? (Boolean(_loc2_) && !isNaN(_loc9_) ? _loc9_ : (isNaN(_loc8_) ? _loc7_ : _loc8_)) : _loc11_);
  165.          oldHeaderHeight = _loc3_;
  166.          if(!isNaN(_loc3_))
  167.          {
  168.             _loc6_.top += _loc3_;
  169.          }
  170.          oldControlBarHeight = _loc4_;
  171.          if(!isNaN(_loc4_))
  172.          {
  173.             _loc6_.bottom += _loc4_;
  174.          }
  175.          _panelBorderMetrics = _loc6_;
  176.          return _panelBorderMetrics;
  177.       }
  178.       
  179.       override mx_internal function drawBackground(param1:Number, param2:Number) : void
  180.       {
  181.          var _loc3_:Array = null;
  182.          var _loc4_:Number = NaN;
  183.          super.mx_internal::drawBackground(param1,param2);
  184.          if(getStyle("headerColors") == null && getStyle("borderStyle") == "default")
  185.          {
  186.             _loc3_ = getStyle("highlightAlphas");
  187.             _loc4_ = !!_loc3_ ? Number(_loc3_[0]) : 0.3;
  188.             drawRoundRect(0,0,param1,param2,{
  189.                "tl":mx_internal::radius,
  190.                "tr":mx_internal::radius,
  191.                "bl":0,
  192.                "br":0
  193.             },16777215,_loc4_,null,GradientType.LINEAR,null,{
  194.                "x":0,
  195.                "y":1,
  196.                "w":param1,
  197.                "h":param2 - 1,
  198.                "r":{
  199.                   "tl":mx_internal::radius,
  200.                   "tr":mx_internal::radius,
  201.                   "bl":0,
  202.                   "br":0
  203.                }
  204.             });
  205.          }
  206.       }
  207.       
  208.       override mx_internal function getBackgroundColorMetrics() : EdgeMetrics
  209.       {
  210.          if(getStyle("borderStyle") == "default")
  211.          {
  212.             return EdgeMetrics.EMPTY;
  213.          }
  214.          return super.borderMetrics;
  215.       }
  216.    }
  217. }
  218.  
  219.